#ifndef __BASE64_H__
#define __BASE64_H__

/****************************************
*Desarrolladores:    Daye, Gisela	*
*----------------  Prieto, Gonzalo	*
*		  Schmoll, Edward Erik 	*
*					*
*Fecha Origen:		[29/03/2012]	*
*-------------				*
*****************************************/

//Directivas
#define B64_PROCESO_OK		   0	//state of process
#define B64_PADDING	 	  64	//To operate with a specific character
#define B64_MAX_CHARACTERS 	   3	//To operate with a specific character
#define B64_LENGTH_TBASE64 	  65	//To operate with a specific character
#define B64_MAX_ASCII 		   4	//To operate with a specific character
#define B64_MAX_STRING  	  76	//To operate with strings

//Mascaras para inicializar los bits no significativos
#define B64_MASK_SET_2_UP       0x3f    //To operate with bits
#define B64_MASK_SET_4_UP       0x0f    //To operate with bit
#define B64_MASK_SET_6_UP       0x03    //To operate with bits
#define B64_MASK_SET_2_BW       0xfc    //To operate with bits
#define B64_MASK_SET_4_BW       0xf0    //To operate with bits
#define B64_MASK_SET_6_BW 	0xc0 	//To operate with bits

//Manejo de errores
#define B64_CHARACTER_INVAL       -1	//To operate with errnos
#define B64_LENGTH_INVAL          -2 	//To operate with errnos

typedef struct TBase64{
	 int value;
	char ASCII;
}TBase64;


/************************************************************************************************
 *FUNCION: b64_encode										*
 *												*
 *PRE:	Buffer: Debe tener la capacidad de almacenar catro caracteres mas el '\0'.		*
 *	binary_data: Debe contener solo 3 bytes.						*
 *												*
 *POS:	Se guarda en 'Buffer' los cuatro caracteres ASCII asociados a la cadena 'binary_data'. 	*
 *												*
 *ERR:  Devuelve 'B64_LENGTH_INVAL' si binary_data tiene un tamanio mayo que 3.			*
 ************************************************************************************************/
int
b64_encode(char* Buffer, char* binary_data,int LenG);


/************************************************************************************************
 *FUNCION: b64_decode										*
 *                                                                                              *
 *PRE:  Buffer: Debe tener la capacidad de almacenar tres caracteres mas el '\0'.               *
 *      encode_data: Debe contener solo los 4 caracteres.                                       *
 *                                                                                              *
 *POS:  Se guarda en 'Buffer' los tres bytes asociados a la cadena 'binary_data'.   		*
 *												*
 *ERR:  Devuelve 'B64_CHARACTER_INVAL' si existe algun caracter invalido.			*
 *	Devuelve 'B64_LENGTH_INVAL' si encode_data tiene un tamanio mayo que 4.			*
 ************************************************************************************************/
int
b64_decode(char* Buffer, char* encode_data,int LenG, int* size_Buffer);

#endif

